package com.example.demo3.utils.strprocess;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 时间处理的工具类。
 * @author cjw 2019-07-11
 */
public class Time_convert {

	/**
	 * 转换后的格式为《yyyy-MM-dd HH:mm:ss》。
	 * @param date
	 * @return
	 */
	public static String convert_tostring(Date date) {
		//
		if(date==null) {
			return null;
		}
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return simple_dateformat.format(date);
	}

	/**
	 * 转换后的格式为《yyyy-MM-dd HH:mm》。
	 * @param date
	 * @return
	 */
	public static String convert_toStrWithoutSec(Date date) {
		//
		if(date==null) {
			return null;
		}
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		return simple_dateformat.format(date);
	}

	/**
	 * 时间的格式为《yyyy-MM-dd HH:mm:ss》或《yyyy-MM-dd》,《yyyyMMddHHmmss》。
	 *
	 * @param str_time
	 * @return
	 */
	public static Date convert_todate(String str_time) {
		// 若str_time为null
		if (str_time == null) {
			return null;
		}
		SimpleDateFormat simple_dateformat = null;
		Date date = null;
		boolean result=false;

		/**
		 * 《yyyy-MM-dd HH:mm:ss》
		 */
		result = str_time.matches("[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2} [0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}[\\s\\S]*");
		if (result == true) {
			simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			try {
				date = simple_dateformat.parse(str_time);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return date;
		}
		/**
		 * 《yyyy-MM-dd》
		 */
		result = str_time.matches("[0-9]{1,4}-[0-9]{1,2}-[0-9]{1,2}[\\s\\S]*");
		if (result == true) {
			simple_dateformat = new SimpleDateFormat("yyyy-MM-dd");
			try {
				date = simple_dateformat.parse(str_time);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return date;
		}
		/**
		 * 《yyyyMMddHHmmss》
		 */
		result = str_time.matches("[0-9]{14}[\\s\\S]*");
		if (result == true) {
			simple_dateformat = new SimpleDateFormat("yyyyMMddHHmmss");
			try {
				date = simple_dateformat.parse(str_time);
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return date;
		}
		/**
		 * 其它情况
		 */
		simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			date = simple_dateformat.parse(str_time);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}

	public static long convert_tolong(Date date) {
		return date.getTime();
	}
	/**
	 * 将long型变量转换成Date型变量。
	 * @param longtime
	 * @return
	 */
	public static Date convert_todate(long longtime) {
		Date date=null;
		date=new Date(longtime);
		return date;
	}

	/**
	 * 获取当前时间,格式为《yyyy-MM-dd HH:mm:ss》
	 * @return
	 */
	public static String getCurrentTime() {
		Date date=new Date();
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return simple_dateformat.format(date);
	}

	/**
	 * 获取当前时间,格式为《yyyyMMddHHmmss》
	 * @return
	 */
	public static String getCurrentTime_onlyDigit() {
		Date date=new Date();
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyyMMddHHmmss");
		return simple_dateformat.format(date);
	}

	/**
	 * 获取当前时间,格式为《yyyyMMdd》。
	 * @param
	 * @return
	 * @author cjw 2019-09-06
	 */
	public static String getCurrentTime_yyyyMMdd(){
		Date date=new Date();
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyyMMdd");
		return simple_dateformat.format(date);
	}

	/**
	 * 根据year,month,获取该月的最大天数。
	 * @param year
	 * @param month
	 * @return
	 */
	public static int getActualMaximum(int year, int month) {
		Calendar calendar=Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month-1);
		int days=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
		return days;
	}

	/**
	 * 将date转换为自然语言。
	 * <pre>
	 * 距离现在一小时以内,返回格式为"xx分钟前";
	 * 距离现在1小时到24小时以内,返回格式为"xx小时前";
	 * 距离现在24小时以后,返回的格式为"《yyyy-MM-dd HH:mm:ss》";
	 *
	 * </pre>
	 *
	 * @param date
	 * @return
	 */
	public static String convert_toNaturalLang(Date date) {

		long timeInterval=0L;
		timeInterval=System.currentTimeMillis()-date.getTime();

		/**
		 * 若date为未来的时间,直接返回"yyyy-MM-dd HH:mm:ss"格式的信息。
		 */
		if(timeInterval<0) {
			SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return simple_dateformat.format(date);
		}

		/**
		 * 距离现在一小时以内,返回格式为"xx分钟前";
		 */
		if(timeInterval<1000*60*60) {
			String minuteStr=null;
			long minute=timeInterval/(1000*60);
			minuteStr=minute+"分钟前";
			return minuteStr;
		}

		/**
		 * 距离现在1小时到24小时以内,返回格式为"xx小时前";
		 */
		if(timeInterval>=1000*60*60&&timeInterval<1000*60*60*24) {
			String hourStr=null;
			long hour=timeInterval/(1000*60*60);
			hourStr=hour+"小时前";
			return hourStr;
		}

		/**
		 * 距离现在24小时以后,返回的格式为"《yyyy-MM-dd HH:mm:ss》";
		 */
		if(timeInterval>=1000*60*60*24) {
			SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return simple_dateformat.format(date);
		}
		//
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return simple_dateformat.format(date);
	}

	/**
	 * 将date转换为带有"星期一"的时间字符串。
	 * <pre>
	 * 输出格式例如: yyyy-MM-dd HH:mm:ss 星期一
	 * </pre>
	 *
	 * @param date
	 * @return
	 */
	public static String convert_tostr_week(Date date) {

		if(date==null) {
			return null;
		}
		//获取时间字符串
		SimpleDateFormat simple_dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String timeStr=simple_dateformat.format(date);

		//星期几
		Calendar calendar=Calendar.getInstance();
		calendar.setTime(date);
		int dayOfWeek=calendar.get(Calendar.DAY_OF_WEEK);
		String weekStr=null;

		switch (dayOfWeek) {
		case 1:
			weekStr="星期日";
			break;
		case 2:
			weekStr="星期一";
			break;
		case 3:
			weekStr="星期二";
			break;
		case 4:
			weekStr="星期三";
			break;
		case 5:
			weekStr="星期四";
			break;
		case 6:
			weekStr="星期五";
			break;
		case 7:
			weekStr="星期六";
			break;
		default:
			break;
		}

		timeStr=timeStr+" "+weekStr;
		return timeStr;
	}

	/**
	 *
	 * @param args
	 * cjw 2018-11-09
	 */
	public static void main_0(String[] args) {

	}


}
